#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>

/*
    创建一个共享内存
    int shmget(key_t key, size_t size, int shmflg);
    参数：
        key : 用户给定的键值，IPC对象的名字
        size: 共享内存的大小
        shmflg: 共享内存的权限
    返回值：成功返回有效的共享内存标识符，失败返回-1

    查看内核中IPC对象： ipcs -m
    删除IPC对象： ipcrm  -m shmid
*/
int main(int argc, char *argv[])
{
    int shm_id;
    int key;
    key = ftok(".", 1);
    if(key < 0 ){
        printf("创建key失败\n");
        return -1;
    }
    shm_id = shmget(key, 100, IPC_CREAT | 0777);
    if(shm_id < 0){
        printf("共享内存创建失败\n");
    }
    printf("共享内存创建成功，shm_id = %d\n",shm_id);
    
    //查看所有IPC对象
    system("ipcs -m");

    //删除共享内存对象（即IPC对象）
    // shmctl(shm_id, IPC_RMID, NULL);

    //删除IPC对象
    char cmd[50] = {0};
    sprintf(cmd, "ipcrm -m %d", shm_id);
    system(cmd);

    //查看所有IPC对象
    system("ipcs -m");
    
    return 0;
}

